// #ifndef VUE3
import Vue from 'vue'
import App from './App'

// 导入网络请求的包
import {
	$http
} from '@escook/request-miniprogram'
// 挂载仓库
import store from '@/store/index.js'





Vue.prototype.$store = store;
// 将按需导入的 $http 挂载到 wx 顶级对象之上，方便全局调用
uni.$http = $http;




$http.baseUrl = "https://backjar.changbai.life"


// $http.baseUrl = "http://192.168.1.50";



Vue.prototype.$globalData = {
	selectedCommonAddress: null, // 用于存储选择的地址数据
	selectedServerAddress: null,
	//用来检测用户是否有删除地址的操作
	commonDeleteFlag: null,
	serverDeleteFlag: null,
	DefaultServerAddressInfo: null,

	//用来存放用户的类型
	userType: null,
	//用来区别是否需要在舌诊onshow刷新
	isRefresh: false,


	//用来存放服务商的状态
	status_1: '选择',
	status_2: '上传',
	status_3: '下单',
	status_4: '上传'

}



// 请求拦截器  
$http.beforeRequest = function(options) {

	console.log(options);


	// 获取token  
	// uni.setStorageSync('token','ddddddd');
	const token = uni.getStorageSync('token');



	// 如果有token，则在请求头中添加Authorization字段  
	if (token) {
		options.header = {
			...options.header,
			token: `${token}`,
		};
	}
};

// 响应拦截器
$http.afterRequest = function(response) {


		if (response.data && response.data.code === 208) {
			// 清除缓存中的token
			uni.$showMsg('请先登录')
			uni.removeStorageSync('token');
			uni.$toPage('/subpkg/login/login')
		}
	},





	// 封装弹框的方法
	uni.$showMsg = function(title = '数据请求失败', duration = 1500) {
		uni.showToast({
			title,
			duration,
			icon: 'none'
		})
	},

	// 封装的页面跳转和传递参数公共方法
	uni.$toPage = function(pagePath, params, isClearStack = false, useReLaunch = false, useRedirect = false) {
		const urlWithParams = pagePath + '?params=' + JSON.stringify(params);

		if (useReLaunch) {
			// 使用reLaunch清空页面栈并跳转
			uni.reLaunch({
				url: urlWithParams
			});
		} else if (isClearStack) {
			// 如果需要清空导航栈，使用navigateBack方法
			uni.navigateBack({
				delta: 1,
				success() {
					uni.navigateTo({
						url: urlWithParams
					});
				}
			});
		} else if (useRedirect) {
			// 使用redirectTo方法跳转
			uni.redirectTo({
				url: urlWithParams
			});
		} else {
			// 如果跳转的不是tabBar页面，使用navigateTo方法
			uni.navigateTo({
				url: urlWithParams,
				fail() {
					// 如果navigateTo失败，则尝试switchTab
					uni.switchTab({
						url: urlWithParams
					});
				}
			});
		}
	},


	uni.$goBack = function(delta = 1) {
		console.log("调用一次")
		uni.navigateBack({
			delta: delta
		});
	};




//封装的上传文件统一方法
uni.$uploadFile = async function(filePath) {
		// uploadFile 方法
		return new Promise((resolve, reject) => {
			uni.uploadFile({
				url: uni.$http.baseUrl + '/common/upload', // 指定服务器上传接口
				filePath: filePath,
				name: 'file', // 文件对应的 key
				success: uploadFileRes => {
					resolve(JSON.parse(uploadFileRes.data));
				}, // 成功后处理逻辑
				fail: error => reject(error) // 失败后处理逻辑
			});
		});
	},


	//调用此方法调取选择图片完成图片校验，最后直接返回后端生成的url
	uni.$chooseImage = async function() {
			try {
				const chooseImageRes = await uni.chooseImage({
					count: 1,
					type: 'image'
				});
				console.log(chooseImageRes);
				// 确保 tempFilePaths 存在且其长度大于0
				if (!chooseImageRes[1].tempFilePaths || chooseImageRes[1].tempFilePaths.length === 0) {
					uni.showToast({
						title: '未选择文件',
						icon: 'none'
					});
					return; // 提前退出函数，因为没有图片被选择
				}
				if (chooseImageRes[1].tempFilePaths.length > 0) {
					// 检查文件类型
					const fileType = chooseImageRes[1].tempFilePaths[0].split('.').pop().toLowerCase();
					if (!['jpg', 'jpeg', 'png', 'gif'].includes(fileType)) {
						uni.showToast({
							title: '请选择图片文件',
							icon: 'none'
						});
						return; // 停止执行
					}

				}

				const tempFilePaths = chooseImageRes[1].tempFilePaths;
				const res = await uni.$uploadFile(tempFilePaths[0]);
				return res.data // 根据实际响应结构调整

			} catch (err) {
				console.error('选择或上传图片过程中出错:', err);
			} finally {
				uni.hideLoading(); // 完成后隐藏加载提示

			}
		},

		//封装的复制方法
		uni.$copyText = function(text) {
			// 复制快递单号方法
			uni.setClipboardData({
				data: text,
				success: function() {
					uni.showToast({
						title: '复制成功'
					});
				},
				fail: function(err) {
					uni.showToast({
						title: '复制失败',
						icon: 'none'
					});
				}
			});

		},


		// 微信支付
		uni.$WxPay = function(responseData) {
			return new Promise((resolve, reject) => {
				const List = {
					appId: "",
					signType: "RSA",
					package: "",
					nonceStr: "",
					timeStamp: "",
					paySign: ""
				};

				// 赋值操作
				Object.keys(responseData).forEach(key => {
					if (key in List) {
						List[key] = responseData[key];
					}
				});

				// 发起支付请求
				uni.requestPayment({
					provider: "wxpay",
					package: List.package,
					nonceStr: List.nonceStr,
					timeStamp: List.timeStamp,
					paySign: List.paySign,
					signType: List.signType,

					success: (e) => {
						uni.$showMsg('支付成功');
						resolve(e); // 支付成功时解决 Promise
					},
					fail: (e) => {
						uni.$showMsg('取消支付');
						reject(e); // 支付失败时拒绝 Promise
					},
					complete: () => {
						console.log("结束");
					}
				});
			});
		}





// 使用实例
// uni.$WxPay(orderResponseData)
// 						 .then(response => {
// 						         // 支付成功的处理
// 						         console.log('支付成功', response);
// 						     })
// 						     .catch(error => {
// 						         // 支付失败的处理
// 						         console.log('支付失败', error);
// 						     });

// 使用实例
// uni.$toPage('/pages/target-page/target-page', {
// 	param1: 'value1',
// 	param2: 'value2'
// })


Vue.config.productionTip = false

App.mpType = 'app'
const app = new Vue({
	...App,
	store
})
app.$mount()
// Vue.use(Circle);
// #endif





// #ifdef VUE3
import {
	createSSRApp
} from 'vue'
import App from './App.vue'
import {
	func
} from 'prop-types'
export function createApp() {
	const app = createSSRApp(App)
	return {
		app
	}
}
// #endif